package com.SuanFa.lanqiao;

import java.util.ArrayDeque;
import java.util.Queue;
//斐波那契数列
public class a10 {
    public static void main(String[] args) {
        int m = 10000000; // 上限
        int maxCyclicNumber = 0; // 记录最大的类斐波那契循环数

        for (int i = 197; i < m; i++) {
            String s = String.valueOf(i); // 将数字转换为字符串
            int length = s.length(); // 获取数字的位数

            // 使用队列存储最近的 length 项
            Queue<Integer> queue = new ArrayDeque<>();
            int sum = 0; // 用于计算前 length 项的和

            // 初始化队列，将数字的每一位存入队列
            for (int j = 0; j < length; j++) {
                int digit = s.charAt(j) - '0'; // 将字符转换为数字
                queue.add(digit);
                sum += digit;
            }

            boolean isCyclic = false; // 标记是否找到符合条件的数

            // 生成数列
            while (true) {
                if (sum == i) {
                    isCyclic = true; // 找到符合条件的数
                    break;
                }
                if (sum > i) {
                    break; // 超过 i，终止当前数的检查
                }

                // 生成新的数列项
                int newItem = sum;
                queue.add(newItem);
                sum += newItem; // 更新 sum

                // 如果队列大小超过 length，移除最早的一项
                if (queue.size() > length) {
                    sum -= queue.poll(); // 移除最早的一项，并更新 sum
                }
            }

            // 如果找到符合条件的数，更新最大值
            if (isCyclic) {
                if (i > maxCyclicNumber) {
                    maxCyclicNumber = i;
                }
            }
        }

        System.out.println("最大的类斐波那契循环数是: " + maxCyclicNumber);
    }

}
